Add --disable-fsync option to both commit and pull (non-local)
authorJames Antill <james@and.org>
Mon, 2 Jun 2014 20:31:58 +0000 (16:31 -0400)
committerColin Walters <walters@verbum.org>
Tue, 3 Jun 2014 19:41:02 +0000 (15:41 -0400)
On some storage configurations, fsync() can be extremely expensive.
Developers and users with slow hard drives may want the ability to opt
for speed over safety.

Furthermore, many production servers have UPS and stable kernels, and
the risk of not fsync'ing in that scenario is fairly low.  These users
should also be able to opt out.

src/ostree/ot-builtin-commit.c
src/ostree/ot-builtin-pull.c

index 6f63205617183f6a4bf7418d2a4cf2edd6417865..fb11a05649a09b2c1e3316d9930325511ad745db 100644 (file)
@@ -46,6 +46,7 @@ static char **opt_key_ids;
 static char *opt_gpg_homedir;
 #endif
 static gboolean opt_generate_sizes;
+static gboolean opt_disable_fsync;
 
 static GOptionEntry options[] = {
   { "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, "One line subject", "subject" },
@@ -67,6 +68,7 @@ static GOptionEntry options[] = {
   { "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, "GPG Homedir to use when looking for keyrings", "homedir"},
 #endif
   { "generate-sizes", 0, 0, G_OPTION_ARG_NONE, &opt_generate_sizes, "Generate size information along with commit metadata", NULL },
+  { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL },
   { NULL }
 };
 
@@ -326,6 +328,8 @@ ostree_builtin_commit (int argc, char **argv, OstreeRepo *repo, GCancellable *ca
     flags |= OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS;
   if (opt_generate_sizes)
     flags |= OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES;
+  if (opt_disable_fsync)
+    ostree_repo_set_disable_fsync (repo, TRUE);
 
   if (flags != 0
       || opt_owner_uid >= 0
index a29bbb73a4220af2ea13a28f13f11167daac64cb..4ed1a151fb580a7b38d7d005672eab784c533d12 100644 (file)
 #include "ostree.h"
 #include "otutil.h"
 
+static gboolean opt_disable_fsync;
+
 static GOptionEntry options[] = {
+  { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL },
   { NULL }
 };
 
@@ -54,6 +57,8 @@ ostree_builtin_pull (int argc, char **argv, OstreeRepo *repo, GCancellable *canc
       goto out;
     }
 
+  if (opt_disable_fsync)
+    ostree_repo_set_disable_fsync (repo, TRUE);
 
   if (strchr (argv[1], ':') == NULL)
     {